home *** CD-ROM | disk | FTP | other *** search
- CKCKER.2DO June 1993
-
- C-KERMIT TO-DO LIST
-
- Ideas for future releases of C-Kermit (in no special order):
-
- . Clean up and incorporate Fulvio Marino's I/O buffering code,
- and eventually remove the old I/O code. First for UNIX, then elsewhere.
- . Convert Sys V / POSIX versions to not need ^\ before local-mode file
- transfer interruption commands (do nonblocking reads of console) (now
- possible because of Fulvio's code?)
- . Let Kermit run as a TCP/IP server, instead of FTP, listening on its own
- socket, so it doesn't have to use Telnet - this will make it go MUCH
- FASTER over TCP/IP connections. Get TCP socket number officially
- assigned.
- . Allow various kinds of network server operation. By default (in UNIX at
- least), Kermit chroot's to /pub/ftp, user anonymous. Or maybe also an
- option for no chroot, to allow anonymous access to entire file system,
- based on permissions of individual files and directories (as on most
- non-UNIX systems). Like ftp server, client can also log in as a specific
- user.
- . Also allow Kermit server to run as user's login shell.
- . Add LOGIN / LOGOUT support in server (it's already in the client);
- in the client, accept LOGIN and LOGOUT as synonyms for REMOTE LOGIN and
- REMOTE LOGOUT.
- . Add a more convenient style of client/server operation, in which SET
- commands given at the client take effect on both the client and the server
- (like the BINARY command, when given to an FTP client).
-
- . Add IF NEWER <file1> <file2> <command>
- . Let Ctrl-L clear and repaint the file transfer display screen
-
- . Add the ability to tell Kermit that a different modem escape sequence is
- in effect (Kermit currently assumes +++, and always uses it when DIAL
- MODEM-HANGUP is ON). Or let Kermit find out itself by looking at
- S-registers. Also have it check whether escape sequence is enabled.
- . Add SET MODEM USER-DEFINED. Just make a blank mdminf structure & pointers
- for it, and then give users SET commands to fill it in.
- . Add SET DIAL COMPRESSION and SET DIAL ERROR-CORRECTION for generic
- enabling/disabling/selection of these items. Get rid of SET DIAL MNP,
- and incorporate it into the new commands. These commands should allow
- specification of various methods AND fallback schemes.
- . Add optional system-wide dialing log, for billing dialout modem users.
- . Need a better mechanism for handling speed-matching modems - recognition of
- interface speed AND connect speed, setting of timeouts, etc, accordingly.
- . Make DIAL command return different status codes, depending on whether
- it was busy, no answer, command error, etc (if it's busy or no answer
- you might want to retry, but if it's a command error, you don't).
- Either return different \v(status) codes, or define a new variable
- \v(dial_status).
- . Add a command-line option for phone number to dial.
- . Fix DF2xx modem support for bidirectional orientation in Ultrix 3.1 & later.
-
- . ttinl() is getting its fingers too much into the protocol. I'd like to
- remove it altogether and just let rpack() do all that stuff, calling
- ttinc() to simply read characters from the communication line, and let
- ttinc() handle all the buffering. Better yet, let's turn ttinc() into a
- macro that calls some kind of ttfillbuf() routine whenever it needs to.
- This would remove several layers of function calls from the packet i/o,
- and it would let us handle TELNET options during file transfer, etc etc.
- Fulvio's code could come in handy here.
- . Call parchk() only at beginning of transaction, not for each packet.
- . Handshake is done wrong in ttinl(). ttinl() should ALWAYS be length-driven.
- Handshake should be looked for AFTER the packet has been read based on its
- length. Otherwise we can't use the printable-handshake for DDK. Once this
- is fixed, allow SET HANDSHAKE CODE accept any number 0..255.
- . Change ck?fio.c to return the text-file byte stream with CRLF delimiters,
- rather than making the system-independent function getpkt() do it.
- . When uploading text files to UNIX, *all* CRs are stripped. The way it
- SHOULD work is: bare CRs are kept, bare LFs are kept, and only CRLFs are
- treated as line terminators. This will take a major reworking of decode()
- in ckcfns.c. It's not obvious how to do this in a clean way, because the
- CRLF might be broken between packets.
-
- . Add Hebrew support.
- . Add SET REPEAT { 0, 2, 3, 4, 5 } to set the repeat-compression threshhold.
- . Make A-packets fit in negotiated packet length (send more than 1 if nec.).
- . Add file protections/permissions to attribute packet processing.
- . Support for "End of attributes" attribute = Attribute "@" (K-370 has it).
- . Add code for breaking outbound attribute string up into more than one
- attribute packet.
- . Add mechanisms for sending and receiving directory trees in a system-
- independent manner. New protocol must be involved for telling the
- remote Kermit to switch to (and if necessary, create) a new directory.
- Could be something as simple as a new "set file names" option.
- Maybe add code for recognizing and converting VMS, MS-DOS, etc, directory
- names based on system-type field from Attribute packet. Or preferably,
- devise standard syntax for file specifications.
-
- . Dynamic adjustments of timeouts based on transfer rate, system load, etc.
- . Calculate delay between S and its ACK & use it (e.g. for SLIP connections)
-
- . Design protocol for file transfer checkpointing and add it to the program.
- . Ditto for higher levels of compression.
-
- . Separation of TERMINAL and COMMAND flow control
- . Add RTS/CTS support for more systems.
- . SET COMMAND SHIFT-IN/OUT { OFF, ON } ??? (maybe not necessary)
-
- . Add {...} parsing to SET KEY for leading/trailing spaces.
- . Handle telnet negotiations at all times, even during file transfer...
- . Change zltor() to strip .~nn~ rather than converting it.
- . When sending a file whose name contains international characters, translate
- the name to ASCII.
- . Add a SHOW command for each SET command?
- . Add a way to redirect output of REMOTE commands to a file.
- . Add \v(wordsize) == sizeof(int).
- . Quoted comma ("\,") in macro definition should not cause break to new cmd.
- . Find out what the system's interrupt character is, and refer to it in
- messages, rather than always saying "Ctrl-C", ditto for suspend character.
- . Let user SET the command-editing characters:
- SET COMMAND { CHARACTER-DELETE, WORD-DELETE, LINE-DELETE, REDISPLAY } ...
- . REMOTE SET <file-character-set>. Needed for anonymous Kermit server.
- . Add Japanese & Chinese ISO 646 (same) as FCS's.
- . Allow multiple actions on command line, e.g. -s, -g, -f...
- . Add IF INPATH <filename> <command>.
- . Add CDPATH handling to CD command (UNIX).
- . System-wide transaction log -- logs all file transfers by all users
- in a common long, showing username, filespec, timestamp, mode, etc.
- . Make log files use the file backup mechanism.
-
- . Make ckufio.c zstime() more flexible (steal code from ck9fio.c).
- . Define a signal people can use to kill Kermit, that it can catch,
- call doexit(), send error packet, whatever....
- . Multiple sessions (network, serial port, etc).
- Session info structure, session manager.
- . INPUT -1 (or 0?) <string> (or something like that) to wait forever.
- . A way of handling multiple INPUT possibilities, including pattern-matching,
- for example:
- MATCH n <pattern> [ var ]
- Pattern :== label regexp [, label regexp [, label regexp [, ... ] ] ]
- Var = variable (\%-style or macro name) to assign match to.
- Examples:
- MATCH 30 {labela login:,labelb more?,labelc term=}
- Or:
- MATCH 30 {aaa A*B, bbb X*Z, ddd [0-9][0-9][0-9]} \%v ; asg match to \%v
- Or:
- MATCH 30 % foo ; match any single char, assign it to macro foo.
- Or some other syntax -- maybe a SWITCH/CASE statement, or allow multiple
- "TRIGGER <pattern> <label>" statements to be in effect (maybe even during
- terminal connection). A SWITCH/CASE feature should be general-purpose,
- allowing INPUT as the switching variable, but also allowing other
- variables and conditions too.
- . Make SET / SHOW KEY read extended keys on NeXT, SPARCstation, Mac...
- . SET TRANSLATE command as in MS-DOS Kermit for user-defined character
- translation during CONNECT.
- . addhlp() should break stuff up into separate lines if too long.
- . Add hh:mm:ss argument for PAUSE and WAIT, as in MS-DOS Kermit.
- . Add \ftranslate(string,cs1,cs2) for translating character set?
- . Add SAVE { COMMUNICATIONS, PROTOCOL, ALL } to save settings in TAKE files.
- . Allow more than 9 macro arguments. Put args in a special array, or SHIFT.
- . Add hook for UNIX file input and output filters, maybe SET { SEND, RECEIVE }
- FILTER <command>. Use with compress, tar, tr, crypt, etc.
- . Add IF READABLE (like IF EXIST).
- . Add IF DIRECTORY (like IF EXIST).
- . Why does it take so long to exit? Because of sleep()'s that are required
- to make sure that the mode-restoring stty's, etc, take effect before the
- close() in BSD. Find some way to do this faster (doesn't seem to be one).
- . Redo input() function to be a state-table switcher?
- . Add cmchar() to parse a character (control or otherwise).
- . Learned scripts - LOG SCRIPT <filename>, CLOSE SCRIPT, record CONNECT
- session as a series of INPUT, PAUSE, OUTPUT, etc, commands.
- . Allow typeahead!
- . Automatically redisplay correct part of bad command?
- . Add command recall (Ctrl-P brings back previous commands, ^N goes forward).
- . Add ON { ERROR, HANGUP, CTRLC, EOF, ... }
- . SET RECEIVE MAIL-COMMAND <template>, with subsitutable parameters.
- Receiver parses {file} and {options} in template, substitutes actual
- filename and options received from client program's MAIL command.
- . Similar idea for SET RECEIVE PRINT-COMMAND.
- . Make UNIX version use pipes for incoming mail and print files.
- . Add more SET FILE NAMES options, like literal but with pathname stripped.
- Allow user to specify a template for fields, capitalization, punctuation.
- Like SET FILE NAME TEMPLATE [[node] sep] [[dev] sep] [[dir] sep] ...
- Or maybe somthing simpler like SET FILE NAMES [UN]CONVERTED [UN]STRIPPED.
- . Add supporting code to SET HOST for SET NETWORK DECNET (VMS, Ultrix).
- . Add supporting code for SET HOST X.25 for VAX PSI and other X.25 products.
- . Add supporting code for SET HOST via ISO/OSI in BSD Networking/2.
- . Find a way in UNIX to check available disk space and refuse incoming files
- that are too big. Tricky, maybe impossible, for many kinds of UNIX.
- . Internationalize:
- . Segregate all message strings into a separate module, to allow
- translation into other languages - a "resource file"? Use xstr.
- Complicated because many different character sets can be used
- for each language.
- . Make string comparisons and "tolower"/"toupper" work with int'l
- character sets (inlcuding in INPUT/REINPUT).
- . Fix \v(date) to report date in different languages, formats.
- . Fix \v(day), \v(nday) to handle non-English day names.
- . Fix \v(ndate) to handle non-English month names.
- . GETOK command answers: Yes, Ja, Si, ...
- . etc etc.
- . Implement server end of REMOTE KERMIT. Means redirecting all Kermit's
- screen output to the packet builder -- no more printf, puts, putc.
- . Reorganize the whole program to define and isolate system depencies better,
- perhaps writing a "sysgen" procedure (like Larry Wall's Configure program).
- . Terminal emulation for UNIX workstations: key definition, screen rollback,
- printer control, etc. This has already been done for Macintosh and OS/2.
- Requires separate ck?con.c for each kind of workstation.
- . IBM 3270 terminal emulation: tn3270, perhaps others.
- . Add support for Kerberos authentication (see 4.4BSD telnet).
- . Write an alternate ckucmd.c that produces screen menus rather than
- interactive commands, given the same command calls (cmkey, cmtxt, cmnum,
- cmcfm, etc). For UNIX ttys, use the curses library. For NeXT, Macintosh,
- Amiga, OS/2 PM, SPARCstations, etc, make real pop-up menus, allow mouse
- input, etc.
- . An X-Windows server/client interface? SunView? Motif? NextStep? etc?
- . Before even thinking about the two items above, design a standard for what
- the interface should look like.
-
- How to do user-defined translations:
- SET FILE CHARACTER-SET USER-DEFINED
- SET XFER CHARACTER-SET <valid-xfer-charset>
- SET USER-TRANSLATION FROM <tcs> xxx yyy ; for incoming files
- SET USER-TRANSLATION TO <tcs> yyy xxx ; for outbound files
- Applies to <tcs> + USER-DEFINED FCS.
- Can have one pair for each TCS.
- Now announcements work right, etc etc.
- DUMP USER-TRANSLATION <tcs> [ <file> ] ; list tables (to file)
- For C-Kermit, we have 4 TCS's, so 8 x 2 x 256 = 2K bytes, not bad:
- . Add FC_USER FCS
- . Add 6 tables (not supported for Kanji)
- . Initialize each table to identity function
- . Add 8 functions (even for TRANSPARENT, but NULL for Kanji)
- . Figure out a way of telling user whether table has been defined.
- . Add SHOW USER-TRANSLATION <tcs> [ <file> ]
- (= a bunch of SET USER-TRANSL commands, with comments)
- . Add DUMP USER-TRANSLATION <tcs> [ <file> ]
- (= just the numbers, comma-separated? space-separated? one per line?)
- . Add LOAD USER-TRANSLATION <tcs> <file>
- (= read table written by DUMP, watch out for value and table-size overflow)
- . Add some kind of built-in test pattern?
-
- (End of CKCKER.2DO)
-